const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.goto('http://127.0.0.1:8598/', { waitUntil: 'networkidle0' });
    // 确保内容渲染完成  
    await page.waitForSelector('body');
    // 步骤：  
    // 1) 在页面中创建一个隐藏的克隆区域，将横向内容复制过去，并移除横向滚动  
    await page.evaluate(() => {
        const scroller = document.querySelector('body');
        if (!scroller) return;

        // 如果已有克隆区域，先清理  
        let cloneHost = document.getElementById('puppeteer-temp-fullwidth');
        if (cloneHost) {
            cloneHost.remove();
        }

        // 创建一个全宽容器，内部直接把滚动区域内容克隆到这里  
        const host = document.createElement('div');
        host.id = 'puppeteer-temp-fullwidth';
        host.style.position = 'relative';
        host.style.width = scroller.scrollWidth + 'px'; // 展开到内容的实际宽度  
        host.style.height = scroller.offsetHeight + 'px';
        host.style.overflow = 'visible';

        // 克隆内容：这里简单地把滚动容器的子节点全部复制到新容器  
        // 也可以仅复刻 innerHTML（更简单但可能样式差异）  
        host.innerHTML = scroller.innerHTML;

        // 将克隆区域插入到 document.body 的末尾，便于截图/导出  
        host.style.margin = '0';
        host.style.padding = '0';
        host.style.transform = 'translateX(0)';
        host.style.webkitTransform = 'translateX(0)';

        document.body.appendChild(host);

        // 隐藏原始滚动容器，避免影响 PDF  
        // scroller.style.visibility = 'hidden';
    });
    // 2) 调整 CSS，确保克隆区域不再滚动且宽度足以显示全部内容  
    await page.evaluate(() => {
        const host = document.getElementById('puppeteer-temp-fullwidth');
        if (host) {
            host.style.overflow = 'visible';
            // 滚动到起点，确保第一页就能看到全宽内容  
            window.scrollTo({ left: 0, top: 0, behavior: 'instant' });
        }
    });
    // 3) 计算导出所需的 PDF 尺寸  
    const pdfConfig = await page.evaluate(() => {
        const host = document.getElementById('puppeteer-temp-fullwidth');
        if (!host) return null;

        // 读取实际宽高（像素）  
        const widthPx = host.scrollWidth;
        const heightPx = host.offsetHeight;

        // Puppeteer 使用点（1 inch = 96 px）单位，且 PDF 支持 page width/height 用于像素到点的近似转换  
        // 这里把像素直接转换为点，公式： points = (pixels / 96) * 72  
        // 但更简单的做法是：直接传入 width/height 以像素/单位的等效转换，Puppeteer 会处理  
        // 为了稳定性，给出一个近似转换：  
        const pxToPoints = (px) => Math.round((px / 96) * 72);

        const widthPoints = pxToPoints(widthPx);
        const heightPoints = pxToPoints(heightPx);
        // 返回用于 page.pdf 的配置
        return {
            widthPoints,
            heightPoints,
            widthPx,
            heightPx
        };
    });
    if (!pdfConfig) {
        throw new Error('未能获取临时全宽容器的尺寸，无法生成完整的 PDF。');
    }
    // 选项整理：你也可以在这里添加边距、纸张方向等
    const pdfOptions = {
        path: 'output.pdf',
        printBackground: true,
        // 使用转换后的点数尺寸
        width: `${pdfConfig.widthPx}px`,
        height: `${pdfConfig.heightPx}px`,
        // 根据需要设置纸张方向
        // landscape: pdfConfig.widthPx > pdfConfig.heightPx, // 仅作为示例，可按实际需要开启
        // 下面是可选的边距配置，单位同上
        margin: {
            top: '0px',
            right: '0px',
            bottom: '0px',
            left: '0px'
        }
    };
    // page.type('#loginAccount', 'yw'); // 立即
    // page.type('#password', '123456'); // 立即

    const inputElement = await page.$('#loginAccount');
    await inputElement.type('yw', { delay: 200 });
    const inputElement1 = await page.$('#password', { delay: 500 });
    await inputElement1.type('123456');
    // const inputElement2 = await page.$('.login-form-button');
    // await inputElement.click();


    page.on('request', (interceptedRequest) => {
        console.log('request', interceptedRequest.url())
    });

    await Promise.all([
        page.waitForNavigation({ waitUntil: 'networkidle0' }),
        page.click('.login-form-button', () => console.log('.login-form-button')),
    ]);
    setTimeout(async () => {

        // const page1 = await browser.newPage();

        // await page.goto('http://127.0.0.1:8598/enterprise/enterprise-resources?pageIndex=1&pageSize=10/', { waitUntil: 'networkidle0' });
        await page.pdf(pdfOptions);
        await page.screenshot({ path: 'screenshot.png' });
        console.log('Done');
        // 7) 清理：恢复原始页面状态，移除临时容器，显示原滚动区域
        // await page.evaluate(() => {
        //     const host = document.getElementById('puppeteer-temp-fullwidth');
        //     if (host) host.remove();

        //     const scroller = document.getElementById('horizontalScroller');
        //     if (scroller) scroller.style.visibility = 'visible';
        // });
        await browser.close();
    }, 5000);

})();